package jbit.dao;

import java.io.Serializable;
import java.util.List;

import jbit.entity.Employee;

import jbit.entity.ClaimVoucher;


public interface ClaimVoucherDao {
		/**
		 * 添加报销单。
		 * @param claimVoucher 报销单。
		 * @return 如果添加成功返回报销单对象，否则，抛出异常。
		 */
	  public ClaimVoucher add(ClaimVoucher claimVoucher);
		/**
		 * 根据报销单Id删除对象。
		 * @param id 主键。
		 */
	  public void deleteById(Serializable id);
		/**
		 * 修改报销单。
		 * @param claimVoucher 报销单。
		 * @return 如果修改成功返回报销单对象，否则，抛出异常。
		 */
	  public ClaimVoucher update(ClaimVoucher claimVoucher);
		/**
		 * 根据报销单id加载对象。
		 * @param id 主键。
		 * @return 返回报销单对象。
		 */
	  public ClaimVoucher get(Serializable id);
		/**
		 * 根据查询条件查询报销单数据。
		 * @param condition 查询条件。
		 * @return 如果condition为null，返回所有报销单数据，否则，使用报销单相关条件查询数据。
		 */
	  public List<ClaimVoucher> find(ClaimVoucher condition);
	  
	  public ClaimVoucher getClaimVoucher(ClaimVoucher claimVoucher);
	  /**
	   * 
	   * 员工查询时得到所有行的方法 当type的值为date时，表示要执行安日期进行查询
	   */
	  public int getAllRowCount(final String hql,final ClaimVoucher condition, final Employee employee,
	          String type);
	  
	  /**
	   * 员工提交或保存报销单后执行的查询方法
	   * 当type的值为date时，表示要执行按日期进行查询
	   */

	  public List<ClaimVoucher> queryForPage(final String hql,final int offset, final int length,
	          final ClaimVoucher condition, Employee employee,
	          String type);
	  
	  /**
	   * 部门经理查询报销单方法 当type的值为date时，表示要执行按日期进行查询
	   */
	  public List<ClaimVoucher> queryForPageM(final String hql,
	          final int offset, final int length,
	          final ClaimVoucher condition, final Employee employee,
	          String type);
	  /**
	   * 部门经理执行查询时调用该方法查询出总条数 当type的值为date时，表示要执行按日期进行查询
	   */
	  public int getAllRowCountM(final String hql,
	          final ClaimVoucher condition, final Employee employee,
	          String type);
}
